<?php
	
	require_once(dirname(__FILE__) . "/../controllers/user.php");
	require_once(dirname(__FILE__) . "/../controllers/calciatore.php");
	require_once(dirname(__FILE__) . "/../model/db_driver.php");
	$cartellaVoti = dirname(__FILE__) . '/voti/';
	$htmlPage = "";
	$result = "";
	session_start();
	if(User::getCurrentUser()==null || User::getCurrentUser()->getRuolo()<User::$ADMIN){
		$htmlPage = "Errore: devi essere un amministratore per visualizzare questa pagina.<br />";
	}else{
	/* Questa parte viene chiamata due volte: una volta dalla richiesta reale e una volta dalla pagina stessa
	 * che scrive solo dentro all'iframe */
		if(isset($_REQUEST["dest"]) && $_REQUEST["dest"]="iframe"){
			/* Codice per l'iframe */
			$htmlPage ="					
				<form method='POST' action='caricaQuotazioni.php?dest=iframe' enctype='multipart/form-data'>
					<input name='quotFile' id='quotFile' type='file' /> &nbsp;&nbsp;
					<input type='submit' name='caricaFile' value='Carica file' /> <!-- -->
				</form>";
				
				/* Se è stata fatto POST sull'iframe carica il file selezionato */
				if(isset($_FILES["quotFile"])){
		    	/* controlla e carica il file sul server */
			    	if($_FILES["quotFile"]["error"]>0){
			    		$htmlPage = $htmlPage . "<div style='font-size:15px;color:red;'>Errore nel caricamento del file: " 
			    			. $_FILES["votesFile"]["error"] . "</div>";
			    	}else{
						$nomeFile = $_FILES["quotFile"]["name"];
						$file_path = "voti/quotazioni.htm";
				    	move_uploaded_file($_FILES["quotFile"]["tmp_name"], $file_path);
						/* adesso salva i risultati sul DB*/
						/*$handle = fopen($file_path,'r');
						$charset = 'UTF-8';
						try{
							stream_encoding($handle, $charset);
						}catch(Exception $ex){
							echo $ex->getMessage();
						}
						$tabella = fread($handle, filesize($file_path));
						fwrite($handle, $tabella);
						fclose($handle);*/
			    		$tabella = file_get_contents($file_path);
						
						//file_put_contents($file_path, $tabella);
			    		
			    		//ereg('(?<=_)\\d{1,2}(?=_Giornata)', $nomeFile, $giornata);
			    		
			    		try{
							$result = caricaQuotazioni($tabella);
							echo "<div style='color:blue'>Caricamento eseguito</div>
									<script type='text/javascript' language='javascript'>
										parent.document.getElementById('dvResults').innerHTML = \"$result\";
									</script>
							";
						}catch (Exception $ex){
							echo "<div style='color:red'>Errore durante il caricamento dei dati sul DB:<br />$ex</div>";
						}
					}
				}
		}else{

		    /* visualizza la finestra con cui caricare
			 * il file e la lista dei file presenti sul server */
			$htmlPage = $htmlPage . "
				<p class='adminTitle'>
					Carica le quotazioni scaricate dalla fantagazzetta
				</p>
				<table style='width:100%'>
				<tr>
					<td style='width:100%; border-bottom: gray 1px solid'>
						<iframe src='caricaQuotazioni.php?dest=iframe' style='width:70%;height:120px;border-style:none;' border='0'>
						</iframe>
					</td>
				</tr>
				<tr>
					<td>
						<div id='dvResults' style='height:600px;width:90%;overflow-y:scroll;'></div>
					</td>
				</tr>
				</table>
			";
		    		
		}

	}
	echo $htmlPage;

	//http://it.php.net/manual/en/xmlreader.movetoelement.php
	function caricaQuotazioni($content){
		$calciatori = array(); //conterrà i voti dei calciatori
		libxml_use_internal_errors(true);
		$content  = '<?xml version="1.0" ?' . '>' . $content . "</body></html>";
		$content = preg_replace('#\<tr\>.+#', '', $content, 1); //elimina la prima riga
		$content = preg_replace('#\<tr\>\<th\>.+\</th\>\</tr\>#', '', $content, 1); //elimina la prima riga
		//$table = simplexml_load_string('<?xml version="1.0" ?' . '>' . $content);
		$table = new XmlReader();
		try{
			$table->XML($content);
			$table->read(); //<html>
			$table->read(); //<body>
			$table->read();	//<table>
			$table->next(); //entra nelle righe
			$table->read();
			/* La riga successiva è della prima squadra */
			leggiQuotazioni($table, $calciatori);
			/* Salva i voti sul DB */
			$html_result = aggiornaQuotazioni($calciatori);
			$table->close();
		}catch (Exception $ex){
			$table->close(); //si assicura di chiudere l'XmlReader
			throw $ex;
		}
		return $html_result;
	}

	
	function leggiQuotazioni($riga, &$calciatori){
	/* legge le quotazioni dalla tabella e per ognuno crea l'oggetto
	 * Calciatore e lo mette nell'array calciatori */
		while ($riga->next()){
			$c = leggiVotoCalciatore($riga);
			if($c!=null){
				array_push($calciatori, $c);
			}
		} //end while

	}
	
	function leggiVotoCalciatore($xr){
		$id; $ruolo; $nome; $squadra; $quotazione; $q3; $q3;
		$xr->read(); //legge il primo td
		$id = $xr->readString(); $xr->next(); // id
		$ruolo = $xr->readString(); $xr->next(); // ruolo
		$nome = $xr->readString(); $xr->next(); // nome
		$squadra = $xr->readString(); $xr->next(); //squadra
		$quotazione = str_replace(",", ".", $xr->readString()); $xr->next(); //quotazione attuale
		$q2 = $xr->readString(); $xr->next(); $q4=$xr->readString(); $xr->next(); //legge le altre due quotazioni
		$c = null;
		//echo "Riga letta<br /> $id | $ruolo | $nome | $nome | $squadra | $quotazione | $q2 | $q3  <br />";
		try{
			$c = new Calciatore($id, $nome, $ruolo, $squadra, 0, '');
			
			$c->setQuotazione($quotazione);
			
		}catch(Exception $ex){}
		
		$xr->next(); //legge la successiva riga
		//fa un minimo controllo che sia stato effettivamente letta la riga di un calciatore
		if(filter_var($c->getId(), FILTER_VALIDATE_INT) && filter_var($quotazione, FILTER_VALIDATE_FLOAT)){
			return $c;
		}else {
			return null;
		}
	}
	
	
	function print_errors(){
	    $errors = libxml_get_errors();
		echo "<br />Trovati " . count($errors) . " errori<br />";
	    foreach ($errors as $error) {
	        echo display_xml_error($error, $xml);
	    }
	    libxml_clear_errors();
	}

function display_xml_error($error, $xml)
{
    $return  = $xml[$error->line - 1] . "\n<br />";
    //$return .= str_repeat('-', $error->column) . "^\n<br />";

    switch ($error->level) {
        case LIBXML_ERR_WARNING:
            $return .= "Warning $error->code: ";
            break;
         case LIBXML_ERR_ERROR:
            $return .= "Error $error->code: ";
            break;
        case LIBXML_ERR_FATAL:
            $return .= "Fatal Error $error->code: ";
            break;
    }

    $return .= trim($error->message) .
               "\n<br />  Line: $error->line" .
               "\n<br />  Column: $error->column";

    if ($error->file) {
        $return .= "\n<br />  File: $error->file";
    }


    return "$return\n\n<br /><br />--------------------------------------------\n\n<br /><br />";
}/**/


	function aggiornaQuotazioni($calciatori){
		$db = new DbDriver();
		$num_updated = 0;
		$num_inserted = 0;
		$num_errors = 0;
		$str_result = "";
		$query = "";
		$res = null;
		foreach($calciatori as $c){
			try{
				$res = $db->aggiornaQuotazione($c);
			}catch(Exception $ex){
				$res = $ex->getMessage();
			}
			switch ($res){
				case 2: 
					$str_result = $str_result . sprintf("aggiunto calciatore: %d, %s, %s, %s, %f<br />",
							$c->getId(), $c->getRuolo(), $c->getNome(), $c->getSquadra(), $c->getQuotazione() );
					$num_inserted++;
					break;
				case 1:
					$num_updated++;
					break;
				case -1:
					$num_errors++;
					$str_result = $str_result . sprintf("<span style='color:red'>id non corrispondente per: %d, %s, %s, %s, %f</span><br />",
							$c->getId(), $c->getRuolo(), $c->getNome(), $c->getSquadra(), $c->getQuotazione() );
					break;
				default:
					$num_errors++;
					$str_result = $str_result . "<div style='color:red;'>$res</div>";
			} //end switch
		} //end foreach
		return "Calciatori aggiunti: $num_inserted. <br />Calciatori aggiornati: $num_updated.<br />Errori: $num_errors.<br />" . $str_result;
		
	}

?>